<article id="wikiArticle">
<div></div>
<h2 id="信息">信息</h2>
<pre><code class="language-javascript">Warning: unreachable code after return statement (Firefox)
</code></pre>
<h2 id="错误类型">错误类型</h2>
<p>警告</p>
<h2 id="什么地方出错了">什么地方出错了?</h2>
<p>在<code>return</code>语句之后的不可达的语句会在下列情形中产生：</p>
<ul>
<li>在<a href="Reference/Statements/return" title="return语句终止函数的执行，并返回一个指定的值给函数调用者。"><code>return</code></a> 语句之后出现其他表达式；</li>
<li>在省略分号的return语句之后直接接一个表达式。</li>
</ul>
<p>当一个表达式出现在一个有效的 <code>return </code>表达式之后时，会出现这个警告，用以说明在 <code>return </code>语句之后的表达式不可达，即这条语句之后的表达式永远不会运行。</p>
<p>为什么我需要在 <code>return </code>语句之后添加分号？在省略分号的 <code>return </code>语句之后，开发者想要终止当前函数的执行还是返回return之后表达式的结果的意图是不明确的。这个警告表明这种情况下 <code>return </code>语句的表述具有二义性。</p>
<p>当在省略分号的return语句之后出现下列语句时，不会出现警告：</p>
<ul>
<li><a href="Reference/Statements/throw" title="throw语句用来抛出一个用户自定义的异常。当前函数的执行将被停止（throw之后的语句将不会执行），并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块，程序将会终止。"><code>throw</code></a></li>
<li><a href="Reference/Statements/break" title="break 语句中止当前循环，switch语句或label 语句，并把程序控制流转到紧接着被中止语句后面的语句。"><code>break</code></a></li>
<li><a href="Reference/Statements/var" title="variable 语句声明了一个变量，可选地将其初始化为一个值。"><code>var</code></a></li>
<li><a href="Reference/Statements/function" title="函数声明定义一个具有指定参数的函数。"><code>function</code></a></li>
</ul>
<h2 id="示例">示例</h2>
<h3 id="无效的例子">无效的例子</h3>
<pre><code class="language-js example-bad">function f() {
  var x = 3;
  x += 4;
  return x;   // <code>return </code>语句立即退出当前方法
  x -= 3;     // 因而该语句从不会执行，即该语句为不可达语句
}

function f() {
  return     // 这条语句被视作 `return;`
    3 + 4;   // 因而此处该函数已经返回，该语句永不会执行
}
</code></pre>
<h3 id="合适的例子">合适的例子</h3>
<pre><code class="language-js example-good">function f() {
  var x = 3;
  x += 4;
  x -= 3;
  return x;  // OK: 执行完成所有语句之后返回
}

function f() {
  return 3 + 4  // OK: 省略分号的 <code>return </code>语句与执行的表达式在同一行
}
</code></pre>
<h2 id="相关页面">相关页面</h2>
<ul>
<li><a href="Reference/Statements/return#Automatic_Semicolon_Insertion" title="return语句终止函数的执行，并返回一个指定的值给函数调用者。">Automatic Semicolon Insertion</a></li>
</ul>
</article>